package tool

import (
	"bufio"
	"encoding/json"
	"os"
)

type Config struct {
	AppName       string         `json:"app_name"`
	AppMode       string         `json:"app_mode"`
	AppHost       string         `json:"app_host"`
	AppPort       string         `json:"app_port"`
	Sms           SmsConfig      `json:"sms"`
	Database      DatabaseConfig `json:"database"`
	MongodbConfig MongodbConfig  `json:"mongodb_config"`
}

type SmsConfig struct {
	SignName     string `json:"sign_name"`
	TemplateCode string `json:"template_code"`
	AppKey       string `json:"app_key"`
	AppSecret    string `json:"app_secret"`
	RegionId     string `json:"region_id"`
}

type DatabaseConfig struct {
	Driver   string `json:"driver"`
	User     string `json:"user"`
	Password string `json:"password"`
	Host     string `json:"host"`
	Port     string `json:"port"`
	DbName   string `json:"db_name"`
	Charset  string `json:"charset"`
	ShowSql  bool   `json:"show_sql"`
}

type MongodbConfig struct {
	Host       string `json:"host"`
	Port       string `json:"port"`
	Collection string `json:"collection"`
	Password   string `json:"password"`
	UserName   string `json:"user_name"`
	Ssl        bool   `json:"ssl"`
	AuthSource string `json:"auth_source"`
	DbName     string `json:"db_name"`
}

var _cgf *Config = nil

func GetConfig() *Config {
	return _cgf
}

func ParseConfig(path string) (*Config, error) {

	file, err := os.Open(path)
	defer file.Close()

	if err != nil {
		panic(err)
	}

	reader := bufio.NewReader(file)
	decoder := json.NewDecoder(reader)

	if err = decoder.Decode(&_cgf); err != nil {
		return nil, err
	}

	return _cgf, nil
}
